Файловая структура БД
На физическом уровне базовая таблица БД представлена в виде набора файлов операционной системы:
-
файлы, которые содержат её данные (файлы данных);
-
файлы со структурами, обеспечивающими ускоренный доступ к данным (файлы индексов);
-
файлы, содержащие неструктурированную информацию большого объёма (BLOB-файлы);
-
файлы фразовых индексов.
Два последних типа файлов создаются только в том случае, если таблица содержит столбцы соответствующего типа.
Именование перечисленных типов файлов в БД (кроме EXT-файлов, которые имеют пользовательские файловые имена) приведено на рисунке 6.
![Физическая структура БД ЛИНТЕР](/upload/docs/images/arht/FisicalStructDB.png)
Максимальное количество создаваемых файлов каждого типа не более 63.
Имена файлов таблицы имеют следующий формат:
< системный номер таблицы >.< тип файла >< номер
файла >
где:
-
< системный номер таблицы >
– системный номер таблицы в БД (т.е. значение столбца $$$S11 данной таблицы в системной таблице$$$SYSRL
); -
< тип файла >
– тип файла таблицы:-
0 – IDX-файл (файл индексов);
-
1 – DATA-файл (файл данных);
-
2 – BLOB-файл (файл BLOB-данных).
-
-
< номер файла >
– порядковый номер файла данного типа.
Например, 116.01, 116.11.
Файлы таблицы могут располагаться на различных физических или логических дисках ОС. Они создаются/изменяются/удаляются ядром СУБД ЛИНТЕР при обработке SQL-запросов создания/модификации/удаления таблицы.
В запросах создания/модификации схемы таблицы можно указать количество и размеры файлов данных, индексов, BLOB-файлов, а также назначить физическое устройство, на котором следует создать тот или иной файл.
Выбор этих характеристик зависит от размеров таблицы, наличия свободного пространства на устройствах прямого доступа и количества этих устройств в конфигурации вычислительного комплекса.
Все файлы СУБД ЛИНТЕР (кроме файлов системного журнала) имеют страничную организацию.
Страница файла – это единица ввода/вывода для ядра СУБД ЛИНТЕР, а также единица захвата, освобождения и расширения файлового пространства. Кроме того, страница является единицей непрерывного расположения данных (запись любой таблицы не может быть расположена на двух и более страницах).
Длина страниц файлов БД ЛИНТЕР равна 4096 байт.
Примечание
СУБД ЛИНТЕР рассчитывает на атомарность записи страницы размером 4096 байт (т.е. предполагает, что каждая такая страница при записи будет либо заменена полностью, либо останется в прежнем состоянии). В случае, если атомарность записи страницы не обеспечивается (т.е. если часть страницы на диске может быть записана содержимым из внутреннего пула страниц, а часть - остаться без изменений), корректная работа СУБД ЛИНТЕР не гарантируется.
Первые страницы каждого файла таблицы занимает битовая карта (BitMap) состояния страниц этого файла. Каждый бит битовой карты отражает:
-
для IDX-файлов – факт занятости соответствующей страницы файла, т.е. занята страница или свободна;
-
для DATA/BLOB-файлов – возможность использования страницы, т.е. наличие/отсутствие свободного места в странице для добавления записи.
Например, первый индексный файл таблицы может иметь следующую структуру:
[B=1][C=2…32768][B=32769][C=32770…65536][B=65537][C=65538…65553][I=65554…98304][B=98305][I=98306…131072]...
где цифры соответствуют порядковым номерам страниц файла, а буквы обозначают:
-
B – страницу битовой карты;
-
C – страницу конвертера;
-
I – страницу индекса.